#!/usr/bin/env python
# -*-python-*-
# This file is part of avahi.
#
# avahi is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# avahi is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
# License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with avahi; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
# USA.

try:
    import anydbm as dbm
    from whichdb import whichdb
except ImportError:
    import dbm
    from dbm import whichdb

import sys

if len(sys.argv) > 1:
    infn = sys.argv[1]
else:
    infn = "service-types"

if len(sys.argv) > 2:
    outfn = sys.argv[2]
else:
    outfn = infn + ".db"

db = dbm.open(outfn, "n")

for ln in open(infn, "r"):
    ln = ln.strip(" \r\n\t")
    
    if ln == "" or ln.startswith("#"):
        continue

    t, n = ln.split(":", 1)

    db[t.strip()] = n.strip()

db.close()

if whichdb(outfn) == "dbm.sqlite3":
    # Python dbm.sqlite3 module (which is used by default) sets journal_mode
    # to WAL when creating the database. Unfortunately this makes the database
    # unable to be opened again by the dbm.sqlite3 module if it is stored on a
    # read-only directory.
    #
    # The behavior is documented here:
    # https://sqlite.org/wal.html#read_only_databases
    # > Even though it is possible to open a read-only WAL-mode database, it
    # > is good practice to converted to PRAGMA journal_mode=DELETE prior to
    # > burning an SQLite database image onto read-only media.
    import sqlite3
    conn = sqlite3.connect(outfn)
    conn.execute("PRAGMA journal_mode = DELETE;")
    conn.close()
